// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLReplaceable;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../SQLStatementImpl.h"
#include "../SQLReplaceable.h"
#include "SQLShowStatement.h"

class SQLShowDatabasesStatement 
: virtual public SQLStatementImpl, 
virtual public SQLShowStatement, 
virtual public SQLReplaceable
{
public:
  BOOL_ptr physical;
  BOOL_ptr full;

  SQLName_ptr database;
  SQLExpr_ptr like;
  SQLExpr_ptr where;

  BOOL_ptr extra;

  SQLShowDatabasesStatement();
  SHAREDOBJECT(SQLShowDatabasesStatement);

  BOOL_ptr isPhysical();

  void setPhysical(BOOL_ptr physical);

  SQLName_ptr getDatabase();

  void setDatabase(SQLName_ptr database);

  SQLExpr_ptr getLike();

  void setLike(SQLExpr_ptr like);

  SQLExpr_ptr getWhere();

  void setWhere(SQLExpr_ptr where);

  void accept0(SQLASTVisitor_ptr visitor);

  BOOL_ptr isExtra();

  void setExtra(BOOL_ptr extra);

  BOOL_ptr isFull();

  void setFull(BOOL_ptr full);

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);
};
